#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include <QSqlDatabase> // 数据库的创建、打开等
#include <QSqlQuery>      // 数据库的增删改查操作
#include <QSqlTableModel> // 数据库表模型
#include <QSqlQueryModel> // 数据库查询模型

#include <QHBoxLayout> // 水平布局
#include <QVBoxLayout> // 垂直布局
#include <QGridLayout>  // 网格布局
#include <QLabel>          // 标签
#include <QTableView> // 表视图
#include <QComboBox> // 下拉式列表
#include <QLineEdit>   // 行编辑框

// 用于在数据模型和界面控件之间建立映射关系，实现数据的双向绑定。
#include <QDataWidgetMapper>
// 用于管理对数据模型中项目的选择操作，并在视图和控件之间传递选择的信息。
#include <QItemSelectionModel>
#include <QSpinBox>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    /* 数据库连接类 */
    QSqlDatabase sqlDatabase;

    /* 用于查询数据 */
    QSqlQueryModel *sqlQueryModel;

    /* 数据映射 */
    QDataWidgetMapper *dataWidgetMapper;

    /* 选择模型 */
    QItemSelectionModel * itemSelectionModel;

    /* 水平布局 */
    QHBoxLayout *hBoxLayout[2];

    /* 垂直布局 */
    QVBoxLayout *vBoxLayout;

    /* 网格布局 */
    QGridLayout *gridLayout;

    /* 用于显示的表格*/
    QTableView *tableView;

    /* 主 Widget */
    QWidget *mainWidget;

    /* 底部容器 */
    QWidget *bottomWidget;

    /* 底部网格布局容器 */
    QWidget *gridWidget;

    /* 照片容器 */
    QWidget *photoWidget;

    /* Label，用于显示照片 */
    QLabel *imageLabel;

    /* Label,底部显示文本 */
    QLabel *label[4];

    /* 性别下拉选择框，选择信息 */
    QComboBox *comboBox;

    /* 数值选择框，[0, 100] */
    QSpinBox *spinBox[2];

    /* 单行输入框 */
    QLineEdit *lineEdit;

private slots:
    /* 表格当前行变化执行的槽函数 */
    void on_currentRowChanged(const QModelIndex&, const QModelIndex&);
};
#endif // MAINWINDOW_H
